package model

import (
	"admin_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

type VirtualGoods struct {
	Id            uint      `gorm:"column:id;type:int UNSIGNED;comment:商品ID;primaryKey;not null;" json:"id"`                               // 商品ID
	Name          string    `gorm:"column:name;type:varchar(100);comment:商品名称;not null;" json:"name"`                                      // 商品名称
	Type          uint      `gorm:"column:type;type:tinyint UNSIGNED;comment:商品类型：1-礼物 2-道具 3-徽章;not null;" json:"type"`                   // 商品类型：1-礼物 2-道具 3-徽章
	ImageUrl      string    `gorm:"column:image_url;type:varchar(255);comment:商品图片URL;default:NULL;" json:"image_url"`                     // 商品图片URL
	Price         float64   `gorm:"column:price;type:decimal(10, 2);comment:价格;not null;" json:"price"`                                    // 价格
	CurrencyType  uint      `gorm:"column:currency_type;type:tinyint UNSIGNED;comment:货币类型：1-金币 2-钻石 3-积分;not null;" json:"currency_type"` // 货币类型：1-金币 2-钻石 3-积分
	Description   string    `gorm:"column:description;type:text;comment:商品描述;" json:"description"`                                         // 商品描述
	EffectConfig  string    `gorm:"column:effect_config;type:json;comment:效果配置（JSON）;default:NULL;" json:"effect_config"`                  // 效果配置（JSON）
	DurationDays  uint      `gorm:"column:duration_days;type:int;comment:有效天数，0表示永久;default:0;" json:"duration_days"`                      // 有效天数，0表示永久
	StockQuantity int       `gorm:"column:stock_quantity;type:int;comment:库存数量，-1表示无限;default:-1;" json:"stock_quantity"`                  // 库存数量，-1表示无限
	IsAvailable   uint      `gorm:"column:is_available;type:tinyint UNSIGNED;comment:是否上架：1-上架 0-下架;default:1;" json:"is_available"`       // 是否上架：1-上架 0-下架
	SortOrder     uint      `gorm:"column:sort_order;type:int;comment:排序权重，越大越靠前;default:0;" json:"sort_order"`                            // 排序权重，越大越靠前
	CreateTime    time.Time `gorm:"column:create_time;type:bigint;comment:创建时间（Unix时间戳秒）;default:NULL;" json:"create_time"`                // 创建时间（Unix时间戳秒）
}

func (vg *VirtualGoods) TableName() string {
	return "virtual_goods"
}
func (vg *VirtualGoods) CreateVirtualGoods() error { //创建虚拟商品
	return config.DB.Create(&vg).Error
}
func (vg *VirtualGoods) UpdateVirtualGoods(where *VirtualGoods) error { //更新虚拟商品
	return config.DB.Model(&VirtualGoods{}).Where(where).Updates(&vg).Error
}
func (vg *VirtualGoods) DeleteVirtualGoods(where *VirtualGoods) error { //删除虚拟商品
	return config.DB.Model(&VirtualGoods{}).Where(where).Update("is_available", 0).Error
}
func (vg *VirtualGoods) GetVirtualGoods(where *VirtualGoods, page, pageSize int) (virtualGoods []*VirtualGoods, err error) { //获取虚拟商品列表
	err = config.DB.Where(where).Scopes(Paginate(page, pageSize)).Find(&virtualGoods).Error
	return
}

func Paginate(page, pageSize int) func(db *gorm.DB) *gorm.DB { //分页
	return func(db *gorm.DB) *gorm.DB {

		if page <= 0 {
			page = 1
		}
		switch {
		case pageSize > 100:
			pageSize = 100
		case pageSize <= 0:
			pageSize = 10
		}
		offset := (page - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}
func (vg *VirtualGoods) GetVirtualDetail(where *VirtualGoods) error { //获取商品详情
	return config.DB.Where(where).Limit(config.Limit).Find(&vg).Error
}
func (vg *VirtualGoods) EnableGoods(where *VirtualGoods) error { //启用商品
	return config.DB.Model(&VirtualGoods{}).Where(where).Update("is_available", 1).Error
}
func (vg *VirtualGoods) DisableGoods(where *VirtualGoods) error { //禁用商品
	return config.DB.Model(&VirtualGoods{}).Where(where).Update("is_available", 0).Error
}
